<?php
class Redimensiona extends Component
{
	/*
	var $link = 'imagem.png';
	var $dimensoes = array(
		'height' => 100,
		'width' => 100
	);	
	$image = redimensionar($link, $dimensoes, true, true, true);
	imagegif($image, 'imagemGif.gif');
	imagedestroy($image);
	*/

	protected $image;
	
	protected $link;
	
	protected $extension;

	/**
	 * Redimensiona uma imagem
	 * 
	 * @param String $link Nome no arquivo, s� ser� usado para saber qual fun��o usar para trabalhar a imagem
	 * @param Array $dimensions Matriz com duas chaves associativas que determinam a altura e largura m�xima
		Exemplo:
		array(
			'height' => 100,
			'width' => 100
		)
	 * @param Boolean $proportinal Se verdadeiro, mantem a propor��o da imagem levando em considera��o sua maior medida
	 * @param Boolean $fit Se verdadeiro, simplesmente redimensiona, sen�o, cria um quadro branco com o tamanho especificado
	   em $dimensions e coloca a imagem redimensionada dentro deste quadro
	 * @param Boolean $orientation Se falso, inverte os valores de altura e largura
	 *
	 * @return ImageResource
	 */
	function redimensionar($link, $dimensions, $proportional = true, $fit = true, $orientation = true) 
	{	
		$this->link = $link;
		$file = pathinfo($link);
		
		$extension = $file['extension'];
		$this->extension = $extension;
			
		//echo $extension;
		//exit;
		$source = null;
		
		switch ($extension) {
			case 'gif':
				$source = imagecreatefromgif($link);
				break;
			case 'jpeg':
			case 'jpg':
				$source = imagecreatefromjpeg($link);
				break;
			case 'png':
				$source = imagecreatefrompng($link);
				break;
		}
		
		$source =  (!$source ? null : $source);
		$image  = null;
		
		
	
		$size = getimagesize($link);
		$srcWidth = $size[0];
		$srcHeight = $size[1];
		
		
		$canvasHeight = $dimensions['height'];
		$canvasWidth = $dimensions['width'];
			
		if ($orientation !== true) {
			$canvasHeight = $dimensions['width'];
			$canvasWidth = $dimensions['height'];
		}
			
		$h = $canvasHeight;
		$w = $canvasWidth;			
		
		if ($proportional === true) {
			if ($srcWidth > $srcHeight) 
				$h = $srcHeight*(100*$w/$srcWidth)/100;
			else 
				$w = $srcWidth*(100*$h/$srcHeight)/100;
		}
			
		$xCoord = $yCoord = 0;
			
		if ($fit !== true) {			
		    	
			$image = @imagecreatetruecolor($canvasWidth, $canvasHeight) or die("Cannot Initialize new GD image stream");	    		
			$white = imagecolorallocate($image, 255, 255, 255);
			imagefill($image, 0, 0, $white);
			$xCoord = $canvasWidth / 2 - $w / 2;
			$yCoord = $canvasHeight / 2 - $h / 2;
		} else
		{						
			$image = @imagecreatetruecolor($w, $h) or die("Cannot Initialize new GD image stream");
		}  
	        imagecopyresampled($image, $source, $xCoord, $yCoord, 0, 0, $w, $h, imagesx($source), imagesy($source));
	        $this->image = $image;
	        return $this->image;
	}
	
	function saveJpg()
	{		
		imagejpeg($this->image, $this->link);
		imagedestroy($this->image);
	}
	
	function saveGif()
	{		
		imagegif($this->image, $this->link);
		imagedestroy($this->image);
	}
	
	function save()
	{
		switch ($this->extension) {
			case 'gif':
				imagegif($this->image, $this->link);
				break;
			case 'jpeg':
			case 'jpg':
				imagejpeg($this->image, $this->link);
				break;
			case 'png':
				imagepng($this->image, $this->link);				
				break;
		}
		imagedestroy($this->image);
	}
}
?>